package pruebasUnitarias.pruebasChoques;

import objetos.Energia;
import objetos.aeronaves.*;
import objetos.aeronaves.enemigos.*;
import objetos.proyectiles.*;
import org.junit.*;

public class ChoqueAlgo42Test {
	private Algo42 algo42;
	private Enemigo avioneta1, avioneta2, avioneta3, avioneta4;
	Enemigo enemigo;
	Proyectil laser, torpedo, cohete;

	@Before
	public void setUp() {
		algo42 = new Algo42();
		algo42.setVidas(1);

		avioneta1 = new Avioneta(15, 5);
		avioneta2 = new Avioneta(15, 5);
		avioneta3 = new Avioneta(15, 5);
		avioneta4 = new Avioneta(15, 5);

		enemigo = new Bomber(5, 4);
		laser = new LaserShoot(enemigo);
		cohete = new Cohete(enemigo);
		torpedo = new Torpedo(enemigo);
	}

	private void algo42ComoNuevo() {
		/*
		 * Hago que el algo42 este vivo y tenga su energia completa por si esta
		 * fue modificada por otro test
		 */
		algo42.darVida();
		algo42.recuperarEnergia(new Energia(100));
	}

	@Test
	public void testChocarAeronave() {
		algo42ComoNuevo();
		int energiaAvioneta = avioneta1.getCantidadEnergia();
		int energiaCompletaAlgo42 = algo42.getCantidadEnergia();

		Assert.assertFalse(algo42.estaDestruido());
		algo42.colisionCon(avioneta1);
		int energiaActualAlgo42 = energiaCompletaAlgo42 - energiaAvioneta;
		Assert.assertTrue(algo42.getCantidadEnergia() == energiaActualAlgo42);

		algo42.colisionCon(avioneta2);
		energiaActualAlgo42 -= energiaAvioneta;
		algo42.colisionCon(avioneta3);
		energiaActualAlgo42 -= energiaAvioneta;
		algo42.colisionCon(avioneta4);
		energiaActualAlgo42 -= energiaAvioneta;
		Assert.assertTrue(algo42.getCantidadEnergia() == energiaActualAlgo42);
		Assert.assertFalse(algo42.estaDestruido());

		System.out.println("El Algo42 choca bien contra aeronaves");
	}

	@Test
	public void testChocarProyectil() {
		algo42ComoNuevo();
		int energiaCompletaAlgo42 = algo42.getCantidadEnergia();
		int poderLaser = laser.getPoder().getCantidad();
		int poderCohete = cohete.getPoder().getCantidad();

		Assert.assertFalse(algo42.estaDestruido());
		algo42.colisionCon(laser);
		int energiaActualAlgo42 = energiaCompletaAlgo42 - poderLaser;
		Assert.assertTrue(algo42.getCantidadEnergia() == energiaActualAlgo42);

		Assert.assertFalse(algo42.estaDestruido());
		algo42.colisionCon(cohete);
		energiaActualAlgo42 -= poderCohete;
		Assert.assertTrue(algo42.getCantidadEnergia() == energiaActualAlgo42);

		System.out.println("El Algo42 choca bien contra proyectiles");
	}

}
